使用二进制着色器缩短 Kanzi 应用程序的加载时间。默认情况下,Kanzi 使用在线着色器,Kanzi Studio 将其作为源代码导出至 kzb 文件。当在目标设备上启动 Kanzi 应用程序时,应用程序会使用 GL 驱动程序加载并编译着色器。编译过程会增加应用程序的加载时间。如果使用二进制着色器,Kanzi Studio 在您导出 kzb 文件时编译着色器,并以您设置的二进制格式导出着色器。您的目标设备可以立即使用二进制着色器。
您只能在驱动程序支持二进制着色器的那些 GPU 上使用二进制着色器,而且还需要拥有适用于设备上的 GPU 的离线着色器编译器。如果 GPU 不支持二进制着色器,Kanzi Engine 会从源编译着色器。虽然设备厂商声称支持特定的二进制着色器格式,但并不意味设备总是支持所有二进制着色器。
您可以:
要使用通用的二进制着色器格式:
GPU 供应商 | 名称 (Name) |
---|---|
Imagination Technologies | SGX_BINARY_IMG 或 IMG |
ARM Mali | MALI_SHADER_BINARY_ARM |
Vivante | SHADER_BINARY_VIV |
Digital Media Professionals | SHADER_BINARY_DMP |
Fujitsu Semiconductor | GCCSO_SHADER_BINARY_FJ |
NVidia | NVIDIA_PLATFORM_BINARY_NV 或 Tegra |
如果您的目标设备使用任何其他 GPU,并且您具备该 GPU 的离线着色器编译器,则使用该着色器格式 GL 常量值的十进制值命名。
BinaryShaderCompilerExecutable <vertexshadercode> <vertexshaderbinary>
<vertexshadercode>
读取数据并写入 <vertexshaderbinary>
。如果您的编译器输出带后缀的二进制,则使用包装脚本输出不带后缀的二进制。BinaryShaderCompilerExecutable <fragmentshadercode> <fragmentshaderbinary>
<fragmentshadercode>
读取数据并写入 <fragmentshaderbinary>
。如果您的编译器输出带后缀的二进制,则使用包装脚本输出不带后缀的二进制。GPU 供应商 | 名称 (Name) |
---|---|
Imagination Technologies | SGX_PROGRAM_BINARY_IMG |
ARM Mali | MALI_PROGRAM_BINARY_ARM |
Vivante | PROGRAM_BINARY_VIV |
Digital Media Professionals |
|
NVidia | NVIDIA_PROGRAM_BINARY_NV |
AMD | Z400_BINARY_AMD |
Kanzi 提供一系列默认材质类型,用于执行基础的渲染操作,例如渲染文本或位块纹理。Kanzi 将默认材质类型存储在专门的 kzb 文件中,后者嵌入在 Kanzi kzcoreui
库中。默认材质类型只提供源着色器,因此应用程序启动过程中或当在应用程序运行时过程中需要使用着色器时,Kanzi 需要一些时间编译着色器。如果想缩短 Kanzi 应用程序的启动时间,您可以用您目标设备的二进制着色调替换掉默认材质类型中内置的源着色器。
要将 Kanzi 着色器替换为二进制着色器,请执行以下操作:
ResourceManager::addKzbFile
函数,将 RuntimeAssets.kzb 添加到您 Kanzi 应用程序的资源管理器中。 //在应用程序启动时,将 RuntimeAssets.kzb 文件注册到资源管理器中。
virtual void onStartup() KZ_OVERRIDE
{
getResourceManager()->addKzbFile("RuntimeAssets.kzb");
}
Kanzi 应用程序启动时,会从 RuntimeAssets.kzb 文件加载二进制着色器,而非使用内置的源着色器。由于 Kanzi Engine 不需要编译源着色器,所以能够缩短 Kanzi 应用程序的启动时间。
在 Kanzi 解决方案中,每个包含着色器的 Kanzi Studio 工程只需要为每种目标设备提供一种二进制着色器格式。在 Kanzi Studio 中,您可以使用主题在每个 kzb 文件中,只包含一个特定目标设备所需的二进制着色器。如果您的 Kanzi Studio 解决方案包含多个工程,您可以将着色器、材质类型和材质存储在专门的资源工程中。这样,您便可以在一个工程中管理不同目标设备的内容。
要为一个工程中的多个目标设备设置二进制着色器,请执行以下操作:
当您导出这些已烘焙的主题时,Kanzi Studio 会在每个 kzb 文件中,仅包含拥有您为对应已烘焙主题设置的二进制着色器类型的材质类型。